package com.cskaoyan.javase.array._4operation._1get;

import java.util.Arrays;

/**
 * 获取数组中的最值
 * 获取数组中的最值，包括获取最大值和最小值，也是常见操作。
 * 具体思路：
 * 任取一个元素（一般选择第一个元素）作为参照物。
 * 遍历其他元素，依次比较，选择出更大/小的值，类似于打擂台。
 * 最终获取最值。
 *
 * 使用擂台法求最值,实际上是一种暴力的,借助了计算机的庞大算力的一种求解方式
 * 实际上求最值,从更优的效率上来说,可以选择排序的方法
 * 比如快速排序的实现,它的效率会更好
 * Java当中数值数组容器的排序,建议大家直接使用:
 * Arrays.sort(数组)方法
 * 它是一种变异的双端快速排序
 *
 * @since 17:49
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {123, 1, 23, 99999, 3, 123, 11, 34, 32, 44, 34, 32, 4, 2, 3, 23, 4, -23, 432, 4, 12, 3, 12, 3, 123, 4534};
        System.out.println("arr数组中元素的最大值是:" + getMaxValueInIntArr(arr));
        System.out.println("arr数组中元素的最小值是:" + getMinValueInIntArr(arr));

    }

    // 需求: 求一个int类型数组中元素的最大值
    public static int getMaxValueInIntArr(int[] target) {
        // 1.假设第一个元素就是最大值
        int max = target[0];
        // 2.遍历整个数组,如果某个元素比假设的最大值还要大,那么它就是最新的最大值,直到遍历完整个数组,那么得到的就是数组中的最大值
        for (int ele : target) {
            if (ele > max) {
                max = ele;
            }
        }
        return max;
    }
    // 需求: 求一个int类型数组中元素的最小值
    public static int getMinValueInIntArr(int[] target) {
        // 1.假设第一个元素就是最小值
        int min = target[0];
        // 2.遍历整个数组,如果某个元素比假设的最小值还要小,那么它就是最新的最小值,直到遍历完整个数组,那么得到的就是数组中的最小值
        // 如果使用普通for循环的话,循环的下标可以从1开始
        for (int i = 1; i < target.length; i++) {
            if (target[i] < min){
                min = target[i];
            }
        }
        return min;
    }
}
